package com.yangtao.springbootfreemarker.web.controller.test.utils;

import com.lowagie.text.BadElementException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfWriter;
import com.yangtao.core.utils.FileUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class Jpg2pdfUtil {

	public static boolean isNumeric(String str){
		Pattern pattern = Pattern.compile("[0-9]*");
		return pattern.matcher(str).matches();
	}

	public static Map<String , File> getFileLastArray(File file,Map<String ,File > map) {
		File[] files = file.listFiles();
		for(File fileTemp : files) {
			if(fileTemp.isDirectory()) {
				if(!fileTemp.getName().equals("bak")){
					getFileLastArray(fileTemp,map);
				}
			} else {
				if(getSuff(fileTemp).equals("jpg")||getSuff(fileTemp).equals("tif")||getSuff(fileTemp).equals("JPG")) {
					/*if(isNumeric(fileTemp.getParentFile().getName().toString())&&Integer.parseInt(fileTemp.getParentFile().getName().toString())==86953){*/
					if(!map.containsKey(fileTemp.getParentFile().getName())) {
						System.out.println(file.getName()+"====组织数据======"+file.getAbsolutePath());
						map.put(fileTemp.getParentFile().getName(), fileTemp.getParentFile());
					}
					/*}*/
				}
			}
		}
		return map;
	}

	/**
	 *
	 * @param imageFolderPath
	 *            图片文件夹地址
	 * @param pdfPath
	 *            PDF文件保存地址
	 *
	 */
	public static void createPdf(String imageFolderPath, String pdfPath) {
		//创建一个文档对象
		Document doc = new Document();
		try {
			String pdfRootPath = pdfPath.substring(0, pdfPath.lastIndexOf("/"));
			if(!FileUtil.exist(pdfRootPath)) {
				FileUtil.mkdir(pdfRootPath);
			}
			//定义输出文件的位置
			PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));
			//开启文档
			doc.open();
			//设定字体 为的是支持中文
			//BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			// Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

			// 获取图片文件夹对象
			File file = new File(imageFolderPath);
			File[] files = file.listFiles();
			// 循环获取图片文件夹内的图片
			for (File file1 : files) {
				if(file1.isDirectory()) {
					continue;
				}
				if(getSuff(file1).equals("db")||getSuff(file1).equals("dat")||getSuff(file1).equals("pdf")) {
					continue;
				}
				// 获取large.jpg图片文件
				File file2 = new File(imageFolderPath + file1.getName());
				// 判断文件是否存在
				if (file2.exists()) {
					//图片的路径
					Image img = Image.getInstance(imageFolderPath + file1.getName());
					//获得图片的宽高
					Float height = img.getHeight();
					Float width = img.getWidth();
					//统一按照宽度压缩
					Integer percent = getPercent(height, width);
					//设置图片居中显示
					img.setAlignment(Image.MIDDLE);
					//按百分比显示图片的比例
					img.scalePercent(percent);
					//可设置图像高和宽的比例
					//img.scalePercent(50, 100);
					doc.add(img);
				}
			}
			System.out.println(file.getName()+"====转换成功======"+files.length);
			// 关闭文档
			doc.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (BadElementException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

	public static String getSuff(File file) {
		return file.getName().substring(file.getName().lastIndexOf(".")+1);
	}

	/**
	 * 按照宽度压缩
	 * @param
	 */
	public static Integer getPercent(Float h,Float w){
		Integer p=0;
		Float p2=0.0f;
		p2=530/w*100;
		p=Math.round(p2);
		return p;
	}

	public static void main(String[] args) {
		File fileDocuServer = new File("G:\\images\\images.war\\DocuServer\\1\\21371");
		Map<String ,File > map = new HashMap<String ,File >();
		map = getFileLastArray(fileDocuServer,map);

		System.out.println(map);
		createPdf(map.get("21371").getAbsolutePath()+"/",
				"G:\\images\\images.war\\21371.pdf");
	}

	public static boolean composePdf(String imageFolderPath, String pdfPath) {
		try {
			// 获取图片文件夹对象
			File file = new File(imageFolderPath);
			File[] files = file.listFiles();
			Integer imgNum = 0;
			for (File file1 : files) {
				if(file1.isDirectory()) {
					continue;
				}
				if(getSuff(file1).equals("db")||getSuff(file1).equals("dat")||getSuff(file1).equals("pdf")) {
					continue;
				}
				imgNum ++;
			}
			if(imgNum > 0) {
				createPdf(imageFolderPath + "/", pdfPath);
				return true;
			}else {
				System.out.println("未转换：数量为O：" + imageFolderPath + "->" + pdfPath);
				return false;
			}
		}catch (Exception e) {
			e.printStackTrace();
			System.out.println("转换失败：数量为O：" + imageFolderPath + "->" + pdfPath);
			return false;
		}

	}
}
